电商推荐系统案例设计 | 文末送书
点击上方蓝色字关注置顶我们!
正文
前言
本文电商推荐系统案例采用协同过滤算法。协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤,首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
一、算法实现设计
【案例使用的数据格式及基本思想】
每行3个字段,依次是用户ID,电影ID,用户对电影的评分(0-5分,每0.5为一个评分点)。算法的思想如图13.4所示。
图13.4 算法的思想
1.建立物品的同现矩阵
按用户分组,找到每个用户所选的物品,单独出现计数及两两一组计数,即两种商品同时出现的次数, 如图13.5所示。
图13.5 物品同现矩阵
2.建立用户对物品的评分矩阵
按用户分组,找到每个用户所选的物品及评分:
图13.6 用户对物品的评分矩阵
3.矩阵计算推荐结果
同现矩阵*评分矩阵=推荐结果,如图13.7所示。
图13.7 矩阵相乘
4.矩阵相乘的计算方法
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。
设A为m*p的矩阵,B为 p*n的矩阵,那么称 m*n的矩阵C为矩阵A与B的乘积,记作 C=AB,其中矩阵C中的第i行第j列元素可以表示为:
图13.8
例如:
图13.9
乘法AB流程用文字描述如下:
第一步:
1)用A的第1行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第1行第1列的数;
2)用A的第1行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第1行第2列的数;
3)用A的第1行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第1行第3列的数;
依次进行,
(直到)用A的第1行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第1行第末列的的数,
第二步:
1)用A的第2行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第2行第1列的数;
2)用A的第2行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第2行第2列的数;
3)用A的第2行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第2行第3列的数;
依次进行,
(直到)用A的第2行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第2行第末列的的数,
依次进行,
...
第n步:
1)用A的第末行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第1行第1列的数;
2)用A的第末行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第末行第2列的数;
3)用A的第末行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第末行第3列的数;
依次进行,
(直到)用A的第末行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第末行第末列的的数。
5.算法本质分析
从本案例的简化后的实现算法来看,其本质将用户的评分视作了标准的相关性权重参数值来使用,如果去掉该参数(或者该参数的值直接取一个常量值),那么对用户的商品推荐操作直接取决于商品之间的同现矩阵,即最为简单粗暴的同现数量推荐法,向用户推荐和自己购买过产品同时在一个订单中出现次数最多的其他物品。这种方法运算效率高,但是在大数据量环境中精确度不够理想,大家可以在实现案例后自行对相关度计算方式进行升级改进。
二、 推荐步骤与架构设计
1.推荐步骤
步骤1: 按用户分组,计算所有物品出现的组合列表,得到用户对物品的评分矩阵;
步骤2: 对物品组合列表进行计数,建立物品的同现矩阵;
步骤3: 合并同现矩阵和评分矩阵;
步骤4: 计算推荐结果列表。
2.架构设计
推荐系统架构:
业务系统记录了用户的行为和对物品的打分
设置系统定时器(如Linux上的CRON,或使用Java的任务调度框架),每间隔一段时间,增量向HDFS导入数据。
完成导入后,设置系统定时器,启动MapReduce程序,运行推荐算法。
完成计算后,设置系统定时器,从HDFS导出推荐结果数据到数据库,方便以后的及时查询。
本文摘编自《大数据Hadoop 3.X分布式处理实战》,经出版方授权发布。
推荐语:
1.版本新。本书采用Hadoop3,版本较新,帮助读者学习前沿技术。
2.项目大。深度剖析日志分析、推荐系统、垃圾消息三大企业级项目实战案例。读者稍加改造,即可在生产环境中使用。
3.内容全。详细介绍HDFS、MapReduce、HBase、Hive、Sqoop、Spark 等主流大数据工具。
▲ 扫码获取本书详情 ▲
“扫一扫回复:Hadoop”